package org.sky.algorithm.sort;

import java.util.Arrays;

/**
 * 希尔排序
 *
 * @author fog
 * @date 2021/11/7
 */

public class Shell {

    public static void main(String[] args) {

        int[] arr = new int[]{1, 9, 0, 7, 5, 2, 3};

        System.out.println(Arrays.toString(arr));

        shellSort(arr);

        System.out.println(Arrays.toString(arr));

    }

    private static void shellSort(int[] arr) {

        int k = 1;

        // 遍历所有步长
        for (int d = arr.length / 2; d > 0; d /= 2) {

            // 遍历所有元素
            for (int i = d; i < arr.length; i++) {

                for (int j = i - d; j >= 0; j -= d) {

                    // 如果当前元素大于加上步长后的那个元素
                    if (arr[j] > arr[j + d]) {
                        int temp = arr[j];
                        arr[j] = arr[j + d];
                        arr[j + d] = temp;
                    }

                }

            }

            System.out.println("第 " + k + " 次排序的结果：" + Arrays.toString(arr));
            k++;
        }

    }

}
